package eva.savant.business.ventas.view

import eva.savant.business.ventas.service.TSVenta
import eva.savant.businessobject.cg.Cajero
import eva.savant.businessobject.vt.Pedido
import eva.savant.businessobject.vt.Vendedor
import eva.savant.businessobject.vt.Venta
import eva.savant.businessobject.vt.VentaDetalle

import javax.faces.bean.ManagedBean
import javax.faces.bean.SessionScoped
import javax.annotation.PostConstruct

@SessionScoped
@ManagedBean(name = 'ITVentaLote')
public class ITVentaLote extends Bean {

  def cajero, vendedor, almacen, almacenero

  TSVenta tsVenta

  Date dateIni, dateEnd

  @PostConstruct
  public void cleanEntity() {

    lsEntity= new ArrayList<Pedido>()

    dateIni = dateEnd= new Date()

    tsVenta= (TSVenta) getSpringBean('tsVenta')

    cajero= get(Cajero,'usuario.id=?',usuario.id)

    vendedor= get(Vendedor,'persona.id=?',usuario.persona.id)

    if(cajero == null) addErrorMessage 'El usuario no es cajero'

    if(vendedor == null) addErrorMessage 'El usuario no es vendedor'

    almacen= vendedor.dosificacion.puesto.almacen

    for(x in almacen.lsAlmacenDetalle) if(x.posicion == 1) { almacenero= x.almacenero; break }
  }

  public List findLsEntity() { form= true

    return find(Pedido,'fecha between ? and ? order by id', dateIni,toMidnight(dateEnd))
  }

  public boolean mergeEntity(Object entity) {

    for(x in lsEntity) if(x.check) {

    if(x.estado.equalsIgnoreCase('P')) {

    def v= tsVenta.saveVenta(cajero,almacen,almacenero,buildVenta(vendedor,x))

    addInfoMessage 'Se guardo la VENTA ' + v.id + ' del PEDIDO ' + x.id    } }

    return true
  }

  public Venta buildVenta(Vendedor vendedor, Pedido pedido) {

    def v= new Venta()

    v.tipo= 'EN'

    v.pedido= pedido

    v.fecha= pedido.fecha

    v.cliente= pedido.cliente

    v.vendedor= vendedor

    v.total= pedido.total

    v.lsVentaDetalle= new ArrayList<VentaDetalle>(); alta(v)


    for(x in pedido.lsPedidoDetalle) {

    def d= new VentaDetalle()

    d.material = x.material

    d.cantidad = x.cantidad

    v.lsVentaDetalle.add d }

    return v
  }

}